導讀:現(xiàn)在很多網(wǎng)站都已經(jīng)建立了一套完整的用戶賬號體系,基于這套體系,再做其他應用的用戶擴展就非常方便。例如,有了微軟的outlook賬戶,就可以登錄win8,可以登錄微軟的郵箱,還可以登錄s
發(fā)表日期:2019-09-19
文章編輯:興田科技
瀏覽次數(shù):8541
標簽:
現(xiàn)在很多網(wǎng)站都已經(jīng)建立了一套完整的用戶賬號體系,基于這套體系,再做其他應用的用戶擴展就非常方便。例如,有了微軟的outlook賬戶,就可以登錄win8,可以登錄微軟的郵箱,還可以登錄skype。同樣地,一個Apple ID可以享受蘋果的所有服務。正所謂,一個賬號,處處使用。
對于企業(yè),可能會有產(chǎn)品線通常有網(wǎng)站,app,微信公眾號等。統(tǒng)一各產(chǎn)品線的賬號體系,實現(xiàn)一個賬號處處使用的目標是非常有必要的。網(wǎng)站和app使用同一個賬號,不需要做任何多余的工作,客戶只要有用戶名密碼即可登錄。對于微信公眾號,由于它是基于微信公眾平臺的一個應用,需要遵守平臺的規(guī)則,所以需要做一些額外的工作才能達到賬號互通的目標。接下來我們就來討論一下,如何做到微信公眾號用戶與網(wǎng)站用戶的賬號體系無縫對接。
當用戶關(guān)注微信公眾號后,會有一些交互,交互過程中可能需要獲取到用戶的身份信息(對應到網(wǎng)站的賬戶信息),例如在公眾號中下單,查詢訂單等操作。那么現(xiàn)在問題來了:對于同一個用戶,我們?nèi)绾谓⑽⑿殴娞栍脩簦╫penid)與網(wǎng)站用戶(userid)之間的對應關(guān)系。這個過程我們稱之為綁定。
微信賬號綁定為了簡化討論,我總結(jié)了這樣兩個場景:
一、用戶已注冊成為我們的網(wǎng)站用戶,但還未關(guān)注我們的微信公眾號;
二、用戶未注冊,但已關(guān)注我們的微信公眾號。
對于以上兩種情況,下面分別討論。
場景一
用戶已注冊成為我們的網(wǎng)站用戶,但還未關(guān)注我們的微信公眾號。如何方便用戶關(guān)注公眾號,同時又能把用戶和微信公眾號綁定在一起呢?很自然地就可以想到二維碼這個入口。
近幾年,二維碼的應用特別廣泛。微信對二維碼的推廣及應用可以說是如魚得水,微信二維碼支付,微信二維碼登錄,微信二維碼名片等等??梢哉f,二維碼已經(jīng)成為O2O中連接線上線下的重要紐帶。小馬哥也稱"二維碼是線上線下的一個關(guān)鍵入口"。
在這里,需要用戶在網(wǎng)站上先登錄,然后在合適的地方給出一個綁定入口,比如在個人設置里。綁定流程如下:
微信賬號綁定流程這里需要用到微信的二維碼生成功能:http://mp.weixin.qq.com/wiki/18/28fc21e7ed87bec960651f0ce873ef8a.html
關(guān)于微信二維碼,官方文檔中這樣說:
目前有2種類型的二維碼,分別是臨時二維碼和永久二維碼,前者有過期時間,有效期30天(2592000秒),但能夠生成較多數(shù)量,后者無過期時間,數(shù)量較少(目前參數(shù)只支持1--100000,即10萬個)。兩種二維碼分別適用于帳號綁定、用戶來源統(tǒng)計等場景。
顯然,我們使用臨時二維碼比較合適。每當用戶刷新頁面時,都可以生成一次。
由于二維碼里可以帶有場景值(scene_id),當用戶掃描帶有場景值的二維碼后,微信服務器會把場景值推送給我們自己的服務器,我們拿到場景值后,就可以做驗證和綁定邏輯。注意:生成二維碼需要認證后的服務號。
一次完整的綁定流程應該是這樣的:
①用戶登錄網(wǎng)頁,點擊“綁定微信賬戶”;
②后臺使用微信接口,生成二維碼鏈接返回給前端顯示,并建立場景值A與用戶的對應關(guān)系;
③用戶掃描二維碼,并點擊關(guān)注微信公眾號(假如已關(guān)注,直接跳到④);
④后臺接收微信服務器推送的場景值A;
⑤后臺根據(jù)場景值A,查詢到對應的用戶ID(依賴于②中建立的對應關(guān)系);
⑥建立用戶userid與微信用戶openid的對應關(guān)系;
⑦給用戶的微信客戶端推送“綁定成功”的提示;
⑧通知前臺頁面,綁定已完成,刷新頁面,并返回一些微信賬戶信息。完成綁定。
其中,②中,“建立場景值A與用戶之間的對應關(guān)系”,因為用戶已經(jīng)登錄,所以用戶點擊“綁定微信賬戶”時,我們可以在后臺分配一個臨時場景值A與用戶ID之間的對于關(guān)系。對于用戶量不大的網(wǎng)站,可以直接使用php中的apc來緩存,并設置一個過期時間(與臨時二維碼過期時間設置成一樣即可)。不要使用session來存儲這種對應關(guān)系,因為④中是微信的推送事件,是不帶session信息的,可以使用redis這類緩存或DB來存儲。另,這里要使用臨時二維碼,數(shù)量上沒有限制,只有時間限制,前臺定時刷新即可。
⑧中,因為http沒有推送機制,所以簡單的方法就是輪詢?nèi)ゲ樵?,是否已?jīng)完成綁定,完成綁定后再刷新頁面。
完成綁定后,用戶再跟我們的微信公眾號交互時,根據(jù)openid可以找到對應的userid,即完成身份識別。對于之前提到的下單,查詢訂單,都是可以實現(xiàn)的。
整個綁定過程并不復雜,實現(xiàn)起來也沒有太大的技術(shù)難度,關(guān)鍵的是思路。
上述流程是用戶已經(jīng)在網(wǎng)頁端登錄了,也就是說已經(jīng)注冊用戶。對于沒有登錄的情況,我們也可以做,在登錄頁面生成一個二維碼,讓用戶用微信掃一掃。假如用戶已經(jīng)注冊,則可以自動登錄,并完成網(wǎng)站賬號和微信賬號的綁定;假如用戶沒有注冊,則網(wǎng)頁跳轉(zhuǎn)到綁定賬號頁面,只要用戶輸入郵箱密碼快速注冊,同時也完成了網(wǎng)站賬號和微信用戶的綁定。實現(xiàn)技術(shù)方案跟上述類似。
場景二
場景二,對于用戶來說操作略微復雜,因為它需要用戶在微信客戶端的網(wǎng)頁中完成登錄/注冊。所以,假如注冊過程太過復雜繁瑣,不建議使用。
流程:
用戶綁定賬戶流程上述綁定流程集成了注冊的過程,所以看起來比較復雜。實現(xiàn)起來也沒有太大的難度,我們重點關(guān)注一下安全性方面的問題,因為綁定賬戶涉及到用戶的信息安全,考慮兩個問題:
1、如何防止鏈接被偽造
登錄/注冊的鏈接需要確保是我們自己的服務器生成的,其他人無法偽造??梢詤⒖嘉⑿诺尿炞C服務器地址的有效性:
http://mp.weixin.qq.com/wiki/17/2d4265491f12608cd170a95559800f2d.html。
所以一個比較安全的登錄鏈接可以是這樣的:
http://api.hello1010.com/wechat/login.html?openid=x1&signature=x2tamp=x3&nonce=x4&echostr&=x5
校驗簽名的代碼:
token值可以跟自己的微信公眾號后臺的一致,也可以換一個,建議換一個安全點。2、如何確保openid是可信的
考慮這種場景:A用戶進入登錄頁面,復制登錄鏈接到瀏覽器,把openid替換為B用戶的openid,使用A用戶的賬號密碼登錄。這樣就把A用戶的userid和B用戶的openid綁定在一起了,顯然是不安全的。
解決方案有很多,比如可以給openid加密,在加密方法保密的情況下,用戶無法偽造加密后的openid。假如不想給openid加密,可以在生成鏈接時,在服務器端建立openid與簽名signature的對應關(guān)系,假如用戶篡改了openid就無法通過校驗。
記住,永遠不要輕信客戶端傳過來的信息。
擴展應用
完成綁定后,我們可以做一些簡單的應用。比如,公司需要舉辦一個線下路演活動,該活動需要報名才能參加,并且需要簽到。
這是一個典型的可以用微信實現(xiàn)的O2O例子。流程如下:
線下路演簽到流程其中,“綁定用戶子流程”就是場景二中的流程。報名的交互在這里不再累述,每個業(yè)務都不一樣。
對于一個已經(jīng)完成綁定的用戶,他參加一個活動,需要做的就是通過微信報名,然后掃描二維碼簽到,體驗相當流暢。
更多新聞
2023
引言對于今天的企業(yè)來說,在互聯(lián)網(wǎng)上建立一個優(yōu)秀的網(wǎng)站至關(guān)重要。。然而,市場競爭激烈,用戶需求不斷變化...
View details
2023
什么是禹州全網(wǎng)建站?禹州全網(wǎng)建站是指為禹州企業(yè)提供全面的網(wǎng)站建設服務,從設計到開發(fā)再到上線推廣,旨在...
View details
2023
為什么大連網(wǎng)站建設模板如此重要?當今數(shù)字時代,擁有一個專業(yè)且吸引人的網(wǎng)站對于任何企業(yè)來說都至關(guān)重要。...
View details
2023
引言在當今數(shù)字化時代,擁有一個營銷型網(wǎng)站對于企業(yè)的發(fā)展至關(guān)重要。。它不僅可以為企業(yè)帶來更多的曝光度,...
View details